package br.com.salao.ejb.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.apache.log4j.Logger;

import br.com.salao.ejb.dao.CidadeDao;
import br.com.salao.entity.Cidade;

public class CidadeDaoImpl implements CidadeDao {

	private final GenericDao<Cidade> dao;
	private EntityManager em;
	private Logger logger = Logger.getLogger(CidadeDaoImpl.class.getName());	
	
	public CidadeDaoImpl(EntityManager em){	
		this.em = em;
		dao = new GenericDao<Cidade>(em, Cidade.class);		
	}

	public Cidade incluir(Cidade cidade) {
		return dao.salvar(cidade);	
	}

	public Cidade buscarCidadePorNome(Cidade cidade){

		Cidade cidadeAux = null;
		try{
			Query query = em.createQuery("from Cidade c where c.nome like :cidade");
			query.setParameter("cidade", cidade.getNome());
			cidadeAux = (Cidade) query.getSingleResult();
		}catch (Exception e) {
			
			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			logger.error(sb.toString());
			
			cidadeAux = null;
		}
		return cidadeAux;
	}

	@SuppressWarnings("unchecked")
	public List<Cidade> listarCidadePorIdEstado(int idEstado){
		
		List<Cidade> cidades = null;

		try {			
			Query query = em.createQuery("from Cidade c where c.estado.id = :idEstado");
			query.setParameter("idEstado", idEstado);
			cidades = query.getResultList();
			
		} catch (Exception e) {
			
			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace() + "\n");
			sb.append(e.getCause() + "\n");
			sb.append(e.getMessage() + "\n");

			logger.error(sb.toString());

			e.printStackTrace();

		}
		return cidades;
	}

	public List<Cidade> listar() {
		return dao.lista();
	}
	
}
